﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;

namespace uploadhttp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //         string    address：接收文件的URL地址，如：http://localhost/UploadFile/Save.aspx
            //fileNamePath：要上传的本地文件，如：D:\test.rar
            //saveName：文件上传到服务器后的名称，如：200901011234.rar
            //progressBar：显示文件上传进度的进度条。
            string dz = "http://localhost:3000/upload";
            string path = "c:\\test.txt";
            string f_name = "test.txt";
            string f = HttpUploadFile(dz, path, f_name);
                MessageBox.Show(f);
        }
        //private int Upload_Request2(string address, string fileNamePath, string saveName, ProgressBar progressBar)
        //{
        //    int returnValue = 0;     // 要上传的文件   
        //    FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
        //    BinaryReader r = new BinaryReader(fs);     //时间戳   
        //    string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
        //    byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");     //请求头部信息   
        //    StringBuilder sb = new StringBuilder();
        //    sb.Append("--");
        //    sb.Append(strBoundary);
        //    sb.Append("\r\n");
        //    sb.Append("Content-Disposition: form-data; name=\"");
        //    sb.Append("file");
        //    sb.Append("\"; filename=\"");
        //    sb.Append(saveName);
        //    sb.Append("\";");
        //    sb.Append("\r\n");
        //    sb.Append("Content-Type: ");
        //    sb.Append("application/octet-stream");
        //    sb.Append("\r\n");
        //    sb.Append("\r\n");
        //    string strPostHeader = sb.ToString();
        //    byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);     // 根据uri创建HttpWebRequest对象   
        //    HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address));
        //    httpReq.Method = "POST";     //对发送的数据不使用缓存   
        //    httpReq.AllowWriteStreamBuffering = false;     //设置获得响应的超时时间（300秒）   
        //    httpReq.Timeout = 300000;
        //    httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
        //    long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;
        //    long fileLength = fs.Length;
        //    httpReq.ContentLength = length;
        //    try
        //    {
        //        progressBar.Maximum = int.MaxValue;
        //        progressBar.Minimum = 0;
        //        progressBar.Value = 0;
        //        //每次上传4k  
        //        int bufferLength = 4096;
        //        byte[] buffer = new byte[bufferLength]; //已上传的字节数   
        //        long offset = 0;         //开始上传时间   
        //        DateTime startTime = DateTime.Now;
        //        int size = r.Read(buffer, 0, bufferLength);
        //        Stream postStream = httpReq.GetRequestStream();         //发送请求头部消息   
        //        postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
        //        while (size > 0)
        //        {
        //            postStream.Write(buffer, 0, size);
        //            offset += size;
        //            progressBar.Value = (int)(offset * (int.MaxValue / length));
        //            TimeSpan span = DateTime.Now - startTime;
        //            double second = span.TotalSeconds;
        //            lb_time.Text = "已用时：" + second.ToString("F2") + "秒";
        //            if (second > 0.001)
        //            {
        //                lblSpeed.Text = "平均速度：" + (offset / 1024 / second).ToString("0.00") + "KB/秒";
        //            }
        //            else
        //            {
        //                lblSpeed.Text = " 正在连接…";
        //            }
        //            lblState.Text = "已上传：" + (offset * 100.0 / length).ToString("F2") + "%";
        //            lblSize.Text = (offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M";
        //            Application.DoEvents();
        //            size = r.Read(buffer, 0, bufferLength);
        //        }
        //        //添加尾部的时间戳   
        //        postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
        //        postStream.Close();         //获取服务器端的响应   
        //        WebResponse webRespon = httpReq.GetResponse();
        //        Stream s = webRespon.GetResponseStream();
        //        //读取服务器端返回的消息  
        //        StreamReader sr = new StreamReader(s);
        //        String sReturnString = sr.ReadLine();
        //        s.Close();
        //        sr.Close();
        //        if (sReturnString == "Success")
        //        {
        //            returnValue = 1;
        //        }
        //        else if (sReturnString == "Error")
        //        {
        //            returnValue = 0;
        //        }
        //    }
        //    catch
        //    {
        //        returnValue = 0;
        //    }
        //    finally
        //    {
        //        fs.Close();
        //        r.Close();
        //    }
        //    return returnValue;
        //}
        public static string HttpUploadFile(string url, string path,string fileName)
        {
            // 设置参数
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            CookieContainer cookieContainer = new CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = "POST";
            string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
            request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
            byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
            byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");

            //请求头部信息 
            StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name=\"file\";filename=\"{0}\"\r\nContent-Type:application/octet-stream\r\n\r\n", fileName));
            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());

            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            byte[] bArr = new byte[fs.Length];
            fs.Read(bArr, 0, bArr.Length);
            fs.Close();

            Stream postStream = request.GetRequestStream();
            postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
            postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
            postStream.Write(bArr, 0, bArr.Length);
            postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
            postStream.Close();

            //发送请求并获取相应回应数据
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            //直到request.GetResponse()程序才开始向目标网页发送Post请求
            Stream instream = response.GetResponseStream();
            StreamReader sr = new StreamReader(instream, Encoding.UTF8);
            //返回结果网页（html）代码
            string content = sr.ReadToEnd();
            return content;
        }


    }
}

//2160_康复门诊
//2101_康复医学科(病区)
//2192
